package net.neptech.service;

import net.neptech.bo.MenuBo;
import net.neptech.model.sys.Menu;
import net.neptech.vo.MenuVo;
import net.neptech.vo.RouterVo;
import net.neptech.vo.TreeSelectVo;

import java.util.Collection;
import java.util.List;
import java.util.Set;

public interface MenuService {
    /**
     * 根据用户ID查询菜单树信息
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    List<Menu> selectMenuTreeByUserId(Long userId);

    /**
     * 构建前端路由所需要的菜单
     *
     * @param menus 菜单列表
     * @return 路由列表
     */
    List<RouterVo> buildMenus(List<Menu> menus);

    /**
     * 根据用户查询系统菜单列表
     *
     * @param menuBo 菜单信息
     * @param userId 用户ID
     * @return 菜单列表
     */
    List<MenuVo> selectMenuList(MenuBo menuBo, Long userId);

    /**
     * 根据用户查询系统菜单列表
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    public List<Menu> selectMenuList(Long userId);

    Set<String> selectMenuPermsByUserId(Long userId);

    void updateMenu(MenuBo menuBo);

    MenuVo selectMenuById(Long menuId);

    List<TreeSelectVo> buildMenuTreeSelect(List<MenuVo> menus);

    void deleteMenuById(Long menuId);

    /**
     * 根据角色ID查询菜单树信息
     *
     * @param roleId 角色ID
     * @return 选中菜单列表
     */
    List<Long> selectMenuListByRoleId(Long roleId);
}
